package com.wang.nio;

import java.io.IOException;
import java.net.URL;
import java.nio.Buffer;
import java.nio.charset.StandardCharsets;

import org.junit.Test;

import com.google.common.io.Resources;

public class Util {

	/*

 同步阻塞IO（JAVA BIO）： 
 同步并阻塞，服务器实现模式为一个连接一个线程，即客户端有连接请求时服务器端就需要启动一个线程进行处理，
  如果这个连接不做任何事情会造成不必要的线程开销，当然可以通过线程池机制改善。
  
  同步非阻塞IO(Java NIO):
  同步非阻塞，服务器实现模式为一个请求一个线程，即客户端发送的连接请求都会注册到多路复用器上，多路复用器轮询到连接有I/O请求时
  才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪，这就要求用户进程不停的去询问。
  
  异步阻塞IO（Java NIO）：  
 此种方式下是指应用发起一个IO操作以后，不等待内核IO操作的完成，等内核完成IO操作以后会通知应用程序，这其实就是同步和异步
 最关键的区别，同步必须等待或者主动的去询问IO是否完成，那么为什么说是阻塞的呢？因为此时是通过select系统调用来完成的，
 而select函数本身的实现方式是阻塞的，而采用select函数有个好处就是它可以同时监听多个文件句柄
 （如果从UNP的角度看，select属于同步操作。因为select之后，进程还需要读写数据），从而提高系统的并发性！
 
   （Java AIO(NIO.2)）异步非阻塞IO: 
   在此种模式下，用户进程只需要发起一个IO操作然后立即返回，等IO操作真正的完成以后，应用程序会得到IO操作完成的通知，
   此时用户进程只需要对数据进行处理就好了，不需要进行实际的IO读写操作，因为真正的IO读取或者写入操作已经由内核完成了。    
   
	 */
	
	public static void displayBufferInfo(Buffer buffer,String msg){
		
		System.out.println(msg+"   ---------------------------");
		System.out.println("position:"+buffer.position());
		System.out.println("limit:"+buffer.limit());
		System.out.println("capacity:"+buffer.capacity());
	}
	
	
	


	
}
